home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / vmenu.arc / KB.ASM < prev    next >
Assembly Source File  |  1985-08-25  |  2KB  |  64 lines

  1. ; kb.asm                  courtesy of Dr. Bob's Utilities  6/18/85
  2.  
  3.  
  4.  
  5.  
  6. ;  get a key from keyboard, no wait - set hi bit if 'special' key
  7. ;  code returned to calling program in ax is
  8. ;
  9. ;            0 if no key pressed
  10. ;            ASCII value for regular keys
  11. ;            DOS extended code + 128 (high bit set) for 'special' keys
  12.  
  13.  
  14. codeseg   segment   word public 'code'
  15.           assume    cs:codeseg
  16.           public    kb_
  17.  
  18. kb_       proc      near
  19.           push      dx      ; save dx
  20.           mov       ah,1    ; tell dos we want to check typeahead status
  21.           int       16h     ; is there a key waiting?
  22.           jnz       getit   ; yes
  23.  
  24.           mov       ax,0    ; if no,
  25.           jmp       fin     ; return 0
  26.  
  27.                             ; a key is waiting in the buffer
  28. getit:    mov       ah,0    ; tell dos to get code from buffer
  29.           int       16h
  30.           cmp       al,0    ; is it a 'special'  key?
  31.           je        special ; yes
  32.  
  33.           and       ah,0    ; if no, clear ah and
  34.           jmp       fin     ; return ASCII value of key
  35.  
  36. special:  mov       al,ah   ; get code in al
  37.  
  38.           or        al,128  ; set hi bit
  39.           and       ah,0    ; clear ah
  40.  
  41.                             ; keys with codes 128-132 need correction
  42.                             ; to match 'official' IBM extended codes
  43.                             ; these are ALT9, ALT0, ALT-, ALT=, and ^PgUp
  44.  
  45.           cmp       al,133  ; check for weirdness (^PgUp, alt9-alt=)
  46.           jge       fin     ; not wierd
  47.           add       ax,128  ; correct for weirdness
  48.  
  49.  
  50. fin:      pop       dx      ; restore dx
  51.           ret               ; return to caller
  52.  
  53. kb_       endp
  54. codeseg   ends
  55.           end
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.